iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

今天我們要來跨足到DB的區域啦(灑花,那麼首先就要來介紹DB的一個重要概念,ACID。

Atomicity(原子性)

Transaction中的所有操作會按造順序執行,並且要全部成功,不然就會算失敗,沒有中間狀態,沒有例外,如果某個步驟出錯,整個Transaction就會rollback,好像什麼都沒發生過,來確保資料庫中的資料能夠從一個正確狀態接續到下一個正確狀態。

假設沒有原子性會怎麼樣呢? 我們去ATM提款,結果ATM扣了我們的存款後,交易失敗沒有吐錢出來,並且扣的錢不會還給我們QQ 那麼我們錢不就白白消失了! 一定會氣死的吧,如果有了原子性,發現無法吐錢出來後,整個交易會rollback,會把扣的款項還原。就不會哭哭囉

Consistency(一致性)

系統在交易開始前和結束後,資料庫都得處於一致的狀態。就好像算數一樣,無論怎麼加減乘除,結果必須得符合規則,不會出現英文字母。

假設沒有一致性,有一個網路商店,庫存系統中記錄了每個商品的庫存數量。當顧客下單購買商品時,庫存系統會減少相應數量。今天有兩位顧客各買了5件商品,但庫存只剩下5件,因為沒有一致性的檢查,庫存變成-5,這樣就不對了,沒有商品可以出貨囉。

Isolation(隔離性)

假設有兩個人在同一時間修改一個文件,各自都不應該受對方的影響。每個交易就像是獨立進行一樣,即使同時有其他交易在運行,結果還是要跟單獨運行時一樣。

假設沒有隔離性,銀行轉帳A轉給B 100元,A轉給C 100元,A同時轉帳了兩筆錢,結果只扣到一筆的錢,因為轉帳給B的時候,資料認為是扣100,而同時轉給C時,也認為是扣100,導致總體只被扣了100,而不是扣200。所以transation在執行的時候必須要先把欄位鎖起來(不給操作),防止其他的操作也修改到同一個值。

Durability(持久性)

就像是把東西存到硬盤裡,不管怎麼關機、重啟,資料都不會消失。交易一旦提交,改動就會永久地保存下來,即使系統崩潰也不會消失,而不像是暫存,斷電就不見了。

如果沒有持久性,就像是我們打報告突然斷電,檔案壞掉! 一整天的辛苦就白費了,這種痛誰都不想要經歷吧XD

總結

今天我們了解了DB很重要的觀念,有了這些觀念,會比較容易理解DB的運作模式XD

reference

https://medium.com/appxtech/%E8%B3%87%E6%96%99%E5%BA%AB-%E6%B7%BA%E8%AB%87%E9%97%9C%E8%81%AF%E5%BC%8F%E8%B3%87%E6%96%99%E5%BA%AB%E8%88%87acid%E7%89%B9%E6%80%A7-83a1b4178981


上一篇
Day 17 Testing types
下一篇
Day 19 DB - ORMs(Object-Relational Mappers)
系列文
Backend Developer的學習Roadmap30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言